﻿using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using QuanLyThuVien.Supporter;
using System.Data.SqlClient;

namespace QuanLyThuVien.DAL
{
    //----------------------------------------------------------------------
    //Desc: class kết nối với bảng PHIEUMUON
    //----------------------------------------------------------------------
    public class DALPhieuMuon
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public DALPhieuMuon()
        { }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành CT_PhieuMuon
        //----------------------------------------------------------------------
        public DTOCT_PhieuMuon ConvertToCT_PhieuMuon(DataRow row)
        {
            return new DTOCT_PhieuMuon(row["MaPhieuMuon"].ToString(), row["MaCuonSach"].ToString());
        }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành CUONSACH
        //----------------------------------------------------------------------
        public DTOCuonSach ConvertToCuonSach(DataRow row)
        {
            DTOCuonSach cuonsach = new DTOCuonSach();
            cuonsach.MaCuonSach = row["MaCuonSach"].ToString();
            cuonsach.MaSach = row["MaSach"].ToString();
            try
            {
                cuonsach.TinhTrang = Boolean.Parse(row["TinhTrang"].ToString());
            }
            catch
            { }
            return cuonsach;
        }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành PHIEUMUON
        //----------------------------------------------------------------------
        public DTOPhieuMuon ConvertToPhieuMuon(DataRow row)
        {
            DTOPhieuMuon phieumuon = new DTOPhieuMuon();
            phieumuon.MaPhieuMuon = row["MaPhieuMuon"].ToString();
            try
            {
                phieumuon.NgayMuon = DateTime.Parse(row["NgayMuon"].ToString());
            }
            catch { }
            phieumuon.DocGia.MaDG = row["MaDG"].ToString();
            try
            {
                phieumuon.NgayHetHan = DateTime.Parse(row["NgayHetHan"].ToString());
            }
            catch { }
            return phieumuon;
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách Phiếu Mượn
        //----------------------------------------------------------------------
        public DataTable LayDanhSachPhieuMuon()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayDanhSachPhieuMuon";
            return DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
        }

        //----------------------------------------------------------------------
        //Desc: Lấy Phiếu Mượn
        //----------------------------------------------------------------------
        public DTOPhieuMuon LayPhieuMuon(string maphieumuon)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayPhieuMuon";
            SqlParameter sqlprMaPhieuMuon = new SqlParameter("@MaPhieuMuon", SqlDbType.VarChar, 15) { Value = maphieumuon };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaPhieuMuon);
            if (data == null || data.Rows.Count == 0)
                return null;
            return ConvertToPhieuMuon(data.Rows[0]);
        }

        //----------------------------------------------------------------------
        //Desc: Lấy danh sách Sách mượn trong tháng
        //----------------------------------------------------------------------
        public List<DTOCuonSach> LaySachMuonTrongThang(int thang, long nam)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayDanhSachSachMuonTrongThang";
            SqlParameter sqlprThang = new SqlParameter("@Thang", SqlDbType.Int) { Value = thang };
            SqlParameter sqlprNam = new SqlParameter("@Nam", SqlDbType.Int) { Value = nam };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprThang, sqlprNam);
            if (data == null)
                return null;
            List<DTOCuonSach> list = new List<DTOCuonSach>();
            for (int i = 0; i < data.Rows.Count; i++)
                list.Add(ConvertToCuonSach(data.Rows[i]));

            return list;
        }

        //----------------------------------------------------------------------
        //Desc: Lấy danh sách Sách trả trễ
        //----------------------------------------------------------------------
        public List<DTOCT_PhieuMuon> LayDSSachTraTre(DateTime ngaylay)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayDanhSachSachTraTre";
            SqlParameter sqlprNgayTK = new SqlParameter("@NgayTK", SqlDbType.Date) { Value = ngaylay };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprNgayTK);
            if (data == null)
                return null;
            List<DTOCT_PhieuMuon> list = new List<DTOCT_PhieuMuon>();
            foreach (DataRow row in data.Rows)
                list.Add(ConvertToCT_PhieuMuon(row));
            return list;
        }

        //----------------------------------------------------------------------
        //Desc: Lấy danh sách Sách đang mượn của độc giả
        //----------------------------------------------------------------------
        public List<DTOCT_PhieuMuon> LayDSSachDangMuon(string madg)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayDanhSachSachDangMuon";
            SqlParameter sqlprMaDG = new SqlParameter("@MaDG", SqlDbType.VarChar, 15) { Value = madg };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaDG);
            if (data == null)
                return null;

            List<DTOCT_PhieuMuon> list = new List<DTOCT_PhieuMuon>();
            foreach (DataRow row in data.Rows)
                list.Add(ConvertToCT_PhieuMuon(row));
            return list;

        }

        //----------------------------------------------------------------------
        //Desc: Lấy danh sách các phiếu mượn của độc giả
        //----------------------------------------------------------------------
        public DataTable LayPhieuMuonDocGia(string madocgia)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayPhieuMuonDocGia";
            SqlParameter sqlprMaDG = new SqlParameter("@MaDG", SqlDbType.VarChar, 15) { Value = madocgia };
            return DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaDG);
        }

        //----------------------------------------------------------------------
        //Desc: lấy ngày hết hạn
        //----------------------------------------------------------------------
        public object LayNgayHetHan(string maphieumuon)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayNgayHetHan";
            SqlParameter sqlprMaPhieuMuon = new SqlParameter("@MaPhieuMuon", SqlDbType.VarChar, 15) { Value = maphieumuon };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaPhieuMuon);
            if (data == null || data.Rows.Count == 0)
                return null;
            else
            {
                DateTime dt = new DateTime();
                try
                {
                    dt = DateTime.Parse(data.Rows[0]["NgayHetHan"].ToString());
                }
                catch
                {
                    return null;
                }

                return dt;
            }
        }

        //----------------------------------------------------------------------
        //Desc: lấy ngày mượn
        //----------------------------------------------------------------------
        public object LayNgayMuon(string maphieumuon)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spPhieuMuon_LayNgayMuon";
            SqlParameter sqlprMaPhieuMuon = new SqlParameter("@MaPhieuMuon", SqlDbType.VarChar, 15) { Value = maphieumuon };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaPhieuMuon);
            if (data == null || data.Rows.Count == 0)
                return null;
            else
            {
                DateTime dt = new DateTime();
                try
                {
                    dt = DateTime.Parse(data.Rows[0]["NgayMuon"].ToString());
                }
                catch
                {
                    return null;
                }

                return dt;
            }
        }


        //----------------------------------------------------------------------
        //Desc: cập nhật phiếu mượn
        //----------------------------------------------------------------------
        public bool CapNhat(DTOPhieuMuon phieumuon)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spPhieuMuon_CapNhatPhieuMuon";
            SqlParameter sqlprThaoTac = new SqlParameter("@ThaoTac", SqlDbType.Int) { Value = 1 };
            SqlParameter sqlprMaPhieuMuon = new SqlParameter("@MaPhieuMuon", SqlDbType.VarChar, 15)
            { Value = phieumuon.MaPhieuMuon };
            SqlParameter sqlprNgayMuon = new SqlParameter("@NgayMuon", SqlDbType.Date) { Value = phieumuon.NgayMuon };
            SqlParameter sqlprMaDG = new SqlParameter("@MaDG", SqlDbType.VarChar, 15) { Value = phieumuon.DocGia.MaDG };
            SqlParameter sqlprNgayHetHan = new SqlParameter("@NgayHetHan", SqlDbType.Date) { Value = phieumuon.NgayHetHan };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprThaoTac, sqlprMaPhieuMuon,
                sqlprNgayMuon, sqlprMaDG, sqlprNgayHetHan);
        }

        //----------------------------------------------------------------------
        //Desc: đếm số sách đang mượn của độc giả
        //----------------------------------------------------------------------
        public int DemSoSachDangMuon(string madocgia)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spPhieuMuon_DemSoSachDangMuon";
            SqlParameter sqlprMaDG = new SqlParameter("@MaDG", SqlDbType.VarChar, 15) { Value = madocgia };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaDG);
            if (obj == null)
                return -1;
            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm số phiếu mượn
        //----------------------------------------------------------------------
        public int DemSoPhieuMuon()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spPhieuMuon_DemPhieuMuon";
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName);
            if (obj == null)
                return -1;
            int dem;
            try
            {
                dem = (int)obj;
            }
            catch
            {
                return -1;
            }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm mã phiếu mượn
        //----------------------------------------------------------------------
        public int DemMaPhieuMuon(string maphieumuon)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spPhieuMuon_DemMaPhieuMuon";
            SqlParameter sqlprMaPhieuMuon = new SqlParameter("@MaPhieuMuon", SqlDbType.VarChar, 15) { Value = maphieumuon };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaPhieuMuon);
            if (obj == null)
                return -1;
            int dem;
            try
            {
                dem = (int)obj;
            }
            catch
            {
                return -1;
            }
            return dem;
        }
    }
}
